package com.demo.test.business;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * @author gy
 * @date 2023/3/16
 */
public class GetAutoIncrementId {

    @Test
    public void m1(){
        // 初始化list 模拟数据库中已经存放 000001—100776的id
        for (int i = 0; i < 100776; i++) {
            loginIdList.add(i+1);
        }
        System.out.println("获取到数据库中不存在的 loginId为: "+
                (this.getLoginId(1,999999) == -1 ? "没有可用的id" : this.getLoginId(1,999999)));
    }

    private static ArrayList loginIdList = new ArrayList();

    /**
     * 业务场景：loginId 为 从 000001一直自增的数字，而且具有唯一性；一直查库的原因是为了解决集群并发导致id重复的问题
     * 此处更便于理解的话，应该使用自底向上的方法来取代递归
     * loginId 的取值范围 1 ~ n
     * 获取一个数据库中不存在的 loginId，来给新用户使用
     * @param minLimit 这个id的最小值
     * @param maxLimit 这个id的最大值
     * @return
     */
    private Integer getLoginId(Integer minLimit,Integer maxLimit) {

        for (int i = minLimit; i <= maxLimit; i++) {
            if (isNotExist(i)){
                return i;
            }
        }
        return -1;
    }

    private Boolean isNotExist(Integer loginId){
       return !loginIdList.contains(loginId);
    }
}
